package modele.articles;

/*
 * Classe representant une liste chainee des elements composant le texte.
 * Ils peuvent se deriver sous la forme de :
 * - un element de ponctuation
 * - un mot
 */

public abstract class Element
{
	//valeur de l'element de texte
	protected String valeur;
	//index de debut du mot dans le texte 
	protected int offsetDebut;
	//taille du mot
	protected int taille;
	//lien vers le maillon suivant
	private Element elementSuivant;
	//lien vers le maillon precedent
	private Element elementPrecedent;
	//element de type mot
	public static final String TYPE_MOT = "mot";
	//element de type ponctuation
	public static final String TYPE_PONCTUATION = "ponctuation";
	
	public Element(String valeur, Element eltPrecedent, Element eltSuivant)
	{
		this.elementPrecedent = eltPrecedent;
		this.setElementSuivant(eltSuivant);
		this.setValeur(valeur);
		this.taille = valeur.length();
		if (this.elementPrecedent == null)
			this.offsetDebut = 0;
		else
			this.offsetDebut = this.elementPrecedent.getOffsetDebut() + this.elementPrecedent.getTaille();
	}
	
	public int getOffsetDebut()
	{
		return this.offsetDebut;
	}
	
	public void setOffsetDebut(int offs)
	{
		this.offsetDebut = offs;
	}
	
	public int getTaille()
	{
		return this.taille;
	}

	public void setValeur(String valeur)
	{
		this.valeur = valeur;
		this.taille = valeur.length();
	}

	public String getValeur()
	{
		return valeur;
	}
	
	public abstract String getTypeElement();

	public void setElementSuivant(Element elementSuivant)
	{
		this.elementSuivant = elementSuivant;
	}

	public Element getElementSuivant()
	{
		return elementSuivant;
	}
	
	public void setElementPrecedent(Element elementPrecedent)
	{
		this.elementPrecedent = elementPrecedent;
		/*if (elementPrecedent != null)
			this.offsetDebut = elementPrecedent.getOffsetDebut() + elementPrecedent.getTaille();*/
	}
	
	@Override
	public String toString()
	{
		return String.valueOf(this.offsetDebut) + " : " + this.valeur;
	}

	public Element getElementPrecedent()
	{
		return elementPrecedent;
	}
}